package org.bees.cms.web.util.velocity.element;

import net.sf.json.JSONObject;

import org.bees.cms.web.util.velocity.Configuration;
import org.bees.cms.web.util.velocity.editer.Editer;

public class Row extends AbstractElement {
	private static final long serialVersionUID = 3203591466185227567L;

	private String name;
	private String height = "30px";
	private Editer editer;

	@Override
	public void from(JSONObject t) throws Exception {
		super.from(t);
		// 得到默认编辑器的 key
		String _default = Configuration.getProperty("editer.default");

		// 获取json中有用的属性 如果取不到 一直采用默认的即原来的
		name = t.containsKey("name") ? t.getString("name") : name;
		height = t.containsKey("height") ? t.getString("height") : height;

		JSONObject param = null;
		String key = null;

		// 得到编辑器 如果没有指定 那么采用缺省的
		if (t.containsKey("editer")) {
			param = t.getJSONObject("editer");
			key = param.containsKey("type") ? param.getString("type") : _default;
			// 如果是个空的json 那么重新实例化 不然没法accumulate
			if (param.isEmpty()) {
				param = new JSONObject();
			}
		} else {
			param = new JSONObject();
			key = _default;
		}

		// 如果没有指定编辑器的name属性,那么采用和该行的name,如果都没指定 那就没办法了...
		if (!param.containsKey("name")) {
			param.accumulate("name", name);
		}
		// 如果没有指定编辑器的取值属性名,那么采用和该行的name,如果都没指定 那就没办法了...
		if (!param.containsKey("property")) {
			param.accumulate("property", name);
		}

		editer = (Editer) Configuration.getEditer(key).newInstance();
		editer.initialize(param);
	}

	@Override
	public JSONObject to() throws Exception {
		return super.to();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getHeight() {
		return height;
	}

	public void setHeight(String height) {
		this.height = height;
	}

	public Editer getEditer() {
		return editer;
	}

	public void setEditer(Editer editer) {
		this.editer = editer;
	}

}